﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using Log;
using mepostras.BLL;
using mepostras.BO.Util;
using mepostras.DAL;
using mepostras.Settings.BusinessLayer;
using GeneralCode = mepostras.BO.Util.BoConfig.MessageCode.General;
namespace mepostras.BO
{
    public class ContactBo : IContactBo
    {
        /// <summary>
        /// Decode để hiển thị ra Html
        /// </summary>
        /// <param name="contact"></param>
        /// <returns></returns>
        private void HtmlDecode(Contact contact)
        {
            if (contact != null)
            {
                contact.FullName = HttpUtility.HtmlDecode(contact.FullName);
                contact.Description = HttpUtility.HtmlDecode(contact.Description);
                contact.Email = HttpUtility.HtmlDecode(contact.Email);
                contact.Phone = HttpUtility.HtmlDecode(contact.Phone);
            }
        }

        /// <summary>
        /// Encode để hiển thị ra Html
        /// </summary>
        /// <param name="contact"></param>
        /// <returns></returns>
        private void HtmlEncode(Contact contact)
        {
            if (contact != null)
            {
                contact.FullName = HttpUtility.HtmlEncode(contact.FullName);
                contact.Description = HttpUtility.HtmlEncode(contact.Description);
                contact.Email = HttpUtility.HtmlEncode(contact.Email);
                contact.Phone = HttpUtility.HtmlEncode(contact.Phone);
            }
        }
        
        /// <summary>
        /// Cập nhật Contact
        /// </summary>
        /// <param name="contact"></param>
        /// <param name="messageCode"></param>
        /// <returns></returns>
        public bool Update(Contact contact, out string messageCode)
        {
            messageCode = GeneralCode.ServerError;
            bool result = false;
            try
            {
                HtmlEncode(contact);

                // Lấy kết quả trả về
                result = DataRepository.ContactProvider.Update(contact);

                // Dựa vào kết quả trả về mà set mã lỗi
                messageCode = result ? GeneralCode.UpdateSuccess : GeneralCode.UpdateFail;
            }
            catch (Exception ex)
            {
                SingletonLogger.Instance.Error("Update", ex);
            }
            return result;
        }

        public bool Insert(Contact contact, out string messageCode)
        {
            messageCode = GeneralCode.ServerError;
            bool result = false;
            try
            {
                contact.CreatedDate = contact.UpdatedDate = DateTime.Now.Date;

                HtmlEncode(contact);

                result = DataRepository.ContactProvider.Insert(contact);

                // Dựa vào kết quả trả về mà set mã lỗi
                messageCode = result ? GeneralCode.InsertSuccess : GeneralCode.InsertFail;
            }
            catch (Exception ex)
            {
                SingletonLogger.Instance.Error("Insert", ex);
            }
            return result;
        }

        public bool Book(Contact contact, out string messageCode)
        {
            // Khi khách hàng gửi contact thì mặc định là false
            contact.IsRead = false;

            if (Insert(contact, out messageCode))
            {
                messageCode = BoConfig.MessageCode.Contact.ContactSuccess;
                return true;
            }

            messageCode = BoConfig.MessageCode.Contact.ContactFail;
            return false;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        /// <param name="messageCode"></param>
        /// <returns></returns>
        public bool Delete(int id, out string messageCode)
        {
            messageCode = GeneralCode.ServerError;
            bool result = false;
            try
            {
                result = DataRepository.ContactProvider.Delete(id);
                messageCode = result ? GeneralCode.DeleteSuccess : GeneralCode.DeleteFail;
            }
            catch (Exception ex)
            {
                SingletonLogger.Instance.Error("Delete", ex);
            }
            return result;
        }
    }
}
